<?php
/**
 * 
 * @author zjx
 * 
 */
class ThumbImageD extends CApplicationComponent{
	/**
	 * @brief 生成缩略图
	 * @param string  $filename 生成缩略图的目标文件名
	 * @param int     $width    缩略图的宽度
	 * @param int     $height   缩略图的高度
	 * @param string  $ExtName  缩略图文件名附加值
	 * @return string 缩略图文件名
	 */
	public static function run($filename, $width = 200, $height = 200, $ExtName = '_t') {
		if (is_file ( $filename )) {
			//获取原图信息
			list ( $imgWidth, $imgHeight ) = getImageSize ( $filename );
	
			//计算宽高比例,获取缩略图的宽度和高度
			if ($imgWidth >= $imgHeight) {
				$thumbWidth = $width;
				$thumbHeight = ($width / $imgWidth) * $imgHeight;
			} else {
				$thumbWidth = ($height / $imgHeight) * $imgWidth;
				$thumbHeight = $height;
			}
			//生成$filename文件图片资源
			$thumbRes = self::createImageResource ( $filename );
			$thumbBox = imageCreateTrueColor ( $width, $height );
	
			//填充补白
			$padColor = imagecolorallocate ( $thumbBox, 255, 255, 255 );
			imagefilledrectangle ( $thumbBox, 0, 0, $width, $height, $padColor );
	
			//拷贝图像
			imagecopyresampled ( $thumbBox, $thumbRes, ($width - $thumbWidth) / 2, ($height - $thumbHeight) / 2, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight );
			//生成缩略图文件名
			$fileExt = self::getFileSuffix ( $filename );
			$thumbFileName = str_replace ( '.' . $fileExt, $ExtName . '.' . $fileExt, $filename );
			//生成图片文件
			$result = self::createImageFile ( $thumbBox, $thumbFileName );
			if ($result == true) {
				return $thumbFileName;
			} else {
				return null;
			}
		} else {
			return null;
		}
	}
	/**
	 * @brief  获取文件扩展名
	 * @param  String $filename  文件名
	 * @return String 文件后缀名
	 */
	protected static function getFileSuffix($filename) {
		$fileInfoArray = pathinfo ( $filename );
		return $fileInfoArray ['extension'];
	}
	/**
	 * @brief 创建图片资源句柄
	 * @param string $filename 图片文件名称
	 * @return resource 图片资源句柄; null:无匹配类型
	 */
	protected static function createImageResource($filename) {
		$imageRes = null;
		
		//获取文件扩展名
		$fileExt = self::getFileSuffix ( $filename );
		
		switch ($fileExt) {
			case 'jpg' :
			case 'jpeg' :
				{
					$imageRes = imagecreatefromjpeg ( $filename );
				}
				break;
			
			case 'gif' :
				{
					$imageRes = imagecreatefromgif ( $filename );
				}
				break;
			
			case 'png' :
				{
					$imageRes = imagecreatefrompng ( $filename );
				}
				break;
			
			case 'bmp' :
				{
					$imageRes = imagecreatefromwbmp ( $filename );
				}
				break;
		}
		return $imageRes;
	}
	
	/**
	 * @brief 生成图片文件
	 * @param resource $imageRes      图片资源名称
	 * @param string   $thumbFileName 缩略图名称
	 * @param bool     $imageResult   生成缩略图状态 true:成功; false:失败;
	 */
	protected static function createImageFile($imageRes, $thumbFileName) {
		//如果目录不可写直接返回，防止错误抛出
		if (! is_writeable ( dirname ( $thumbFileName ) )) {
			return false;
		}
		
		$imageResult = false;
		//获取文件扩展名
		$fileExt = self::getFileSuffix ( $thumbFileName );
		
		switch ($fileExt) {
			case 'jpg' :
			case 'jpeg' :
				{
					$imageResult = imagejpeg ( $imageRes, $thumbFileName, 100 );
				}
				break;
			
			case 'gif' :
				{
					$imageResult = imagegif ( $imageRes, $thumbFileName );
				}
				break;
			
			case 'png' :
				{
					$imageResult = imagepng ( $imageRes, $thumbFileName );
				}
				break;
			
			case 'bmp' :
				{
					$imageResult = imagewbmp ( $imageRes, $thumbFileName );
				}
				break;
		}
		return $imageResult;
	}
	/**
	 * 获取加后缀的文件
	 * @param string $filename
	 * @param string $extName
	 * @return string
	 */
	protected static function getThumbFile($filename, $extName = '_t') {
		$fileExt = self::getFileSuffix ( $filename );
		$thumbFileName = str_replace ( '.' . $fileExt, $extName . '.' . $fileExt, $filename );
		return $thumbFileName;
	}
}

?>